package org.qqcui.designpattern.principles.crp;


/**
 * 组合复用原则示例二，通过依赖、组合、聚合的方式，来满足复用
 * 依赖：B依赖A，在B中使用一个方法将A传入即可，A作为B中方法的一个参数
 * 组合：把A组合到B里面，B有个成员变量是A类型的，在构建该属性是就new，即：当B的一个对象实例创建好的时候，
 *       B中的属性a也创建好了，此时，A和B的关系是组合关系
 * 聚合：把A聚合到B里面，B有个成员变量是A类型的，用set方法传入。
 * @author cuiqingqiang
 * @version 1.0
 * @date 2020-10-14 23:01
 **/
public class Compose2 {

	public static void main(String[] args) {
		C c = new C();

		D d = new D();
		d.option1(c);

		E e = new E();
		e.setC(c);
		e.option2();

		F f = new F();
		f.option3();
	}
}

class C {
	public void option1() {
		System.out.println("C->option1");
	}

	public void option2() {
		System.out.println("C->option2");
	}

	public void option3() {
		System.out.println("C->option3");
	}
}

/**
 * D依赖于C，两者之间形成了依赖关系
 */
class D {
	public void option1(C c) {
		c.option1();
	}
}

/**
 * C聚合到E中，E和C形成了聚合的关系
 */
class E {
	C c;
	public void setC(C c) {
		this.c = c;
	}

	public void option2() {
		c.option2();
	}
}

/**
 * C组合到F中，F和C形成了组合的关系
 */
class F {
	C c = new C();

	public void option3() {
		c.option3();
	}
}